import java.util.HashMap;
import java.util.Map;
/*
水果成篮
采用哈希的方法存储水果的种类
LeetCode连接：https://leetcode.cn/problems/fruit-into-baskets/description/
思路也是滑动窗口，包括入窗，判断是否要出窗
也可以使用数组模拟哈希表，这样会更快一些
 */
class Solution {
    public int totalFruit(int[] fruits) {
        Map<Integer,Integer> map=new HashMap<>();
        int len=0;
        int left=0,right=0;
        int n=fruits.length;
        while(right<n){
            //入窗口
            if(!map.containsKey(fruits[right])){
                map.put(fruits[right],1);
            }else{
                int t= map.get(fruits[right]);
                t++;
                map.put(fruits[right],t);
            }
            //出窗口
            while(left<=right && map.size()>2){
                int t= map.get(fruits[left]);
                if(t==1){
                    map.remove(fruits[left]);
                    left++;
                    break;
                }else{
                    t--;
                    map.put(fruits[left],t);
                }
                left++;
            }
            //更新数据
            len=Math.max(len,right-left+1);
            right++;
        }
        return len;
    }
}